package com.ty.springbootshiro.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ty.springbootshiro.config.MyShiroRealm;
import com.ty.springbootshiro.entity.Right;
import com.ty.springbootshiro.entity.Role;
import com.ty.springbootshiro.service.RoleService;
import jakarta.annotation.Resource;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.RealmSecurityManager;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * RoleController
 *
 * @aurhor whs
 * @since 2024/10/28
 */
@Controller
@RequestMapping(value = "/role")
public class RoleController {

    @Resource
    private RoleService roleService;

    @RequestMapping("/list")
    public String list(@RequestParam(required = false, defaultValue = "") String roleName,
                       @RequestParam(required = false, defaultValue = "1") int pageIndex, Model model) {
        Sort sort = Sort.by(Sort.Direction.ASC, "roleId");
        Pageable pageable = PageRequest.of(pageIndex - 1, 3, sort);
        Page<Role> rolePage =roleService.rolePage(roleName, (Page<Role>) pageable);
        model.addAttribute("rolePage", rolePage);
        model.addAttribute("roleName", roleName); //保存查询条件
        return "role/list";
    }
    @RequestMapping("/add")
    public String add(Model model){
        //查询所有权限，用于指派权限
        List<Right> rights = roleService.findAllRights();
        model.addAttribute("rights",rights);
        return "role/add";
    }
    @RequestMapping("/edit")
    public String edit(Long roleId,Model model){
        Role role = roleService.getRole(roleId);
        model.addAttribute("role",role);
        //查找角色拥有的权限
        List<Right> rights = roleService.findRightsByRole(role);
        model.addAttribute("rights",rights);
        return "role/edit";
    }
    @RequestMapping("/save")
    public String save(Role role,String[] rightCodes){
        if(rightCodes!=null){
            for (String rightCode : rightCodes) {
                Right right = new Right();
                right.setRightCode(rightCode);
                role.getRights().add(right);
            }
        }
        roleService.saveRole(role);
//        清空权限缓存
        RealmSecurityManager rsm= (RealmSecurityManager) SecurityUtils.getSecurityManager();
        MyShiroRealm realm= (MyShiroRealm) rsm.getRealms().iterator().next();
        realm.clearAllCachedAuthorizationInfo();

        return "redirect:/role/list";
    }
    @RequestMapping("/del")
    @ResponseBody
    public Map del(Long roleId){ // Ajax 删除
        Map map=new HashMap<>();
        try {
            roleService.deleteRole(roleId);
            map.put("delResult",true);
        } catch (Exception e) {
            e.printStackTrace();
            map.put("delResult",false);
        }
        return map;
    }






}
